package it.apiconsulting.live.controller;


import it.apiconsulting.live.model.Categoria;
import it.apiconsulting.live.model.SottoCategoria;
import it.apiconsulting.live.util.HibernateUtil;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.classic.Session;


public class SottoCategoriaManager extends HibernateUtil {

	public SottoCategoria add(SottoCategoria sottoCategoria) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(sottoCategoria);
		session.getTransaction().commit();
		return sottoCategoria;
	}
	
	public SottoCategoria update(SottoCategoria sottoCategoria) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.update(sottoCategoria);
		session.getTransaction().commit();
		return sottoCategoria;
	}
	
	public SottoCategoria delete(Long id) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		SottoCategoria sottocategoria = (SottoCategoria) session.load(SottoCategoria.class, id);
		if(null != sottocategoria) {
			session.delete(sottocategoria);
		}
		session.getTransaction().commit();
		return sottocategoria;
	}

	public List<SottoCategoria> list() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<SottoCategoria> sottocategorie = null;
		List<Categoria> categorie = null;
		try {
			
			Query querySottoCategory = session.createQuery("from SottoCategoria");
			sottocategorie = (List<SottoCategoria>)querySottoCategory.list();
			
			Query queryCategory = session.createQuery("from Categoria");
			categorie = (List<Categoria>)queryCategory.list();
			
			for ( int i = 0; i < sottocategorie.size(); i++ ){
				for ( int j = 0; j < categorie.size(); j++ ){
					if ( sottocategorie.get(i).getCategoriapadre().equals(categorie.get(j).getId()) ) {
						sottocategorie.get(i).setNomecategoriapadre(categorie.get(j).getNome() );
						break;
					}
				}
			}
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return sottocategorie;
	}
	
	public List<SottoCategoria> listByIdCategoria(Long idCategoriaPadre) {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<SottoCategoria> sottocategorie = null;
		try {
			
			Query query = session.createQuery("from SottoCategoria where categoriapadre = " + idCategoriaPadre);
			sottocategorie = (List<SottoCategoria>)query.list();
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return sottocategorie;
	}
	
	public SottoCategoria getSottoCategoriaById(Long idSottoCategoria) {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		SottoCategoria sottocategoria = null;
		try {
			
			Query query = session.createQuery("from SottoCategoria where id = "+ idSottoCategoria);
			sottocategoria = (SottoCategoria)query.uniqueResult();
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return sottocategoria;
	}
}
